home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 1996 November / Software of the Month Club 1996 November.iso / pc / dos / edu / activem / simplot.bas < prev    next >
Encoding:
BASIC Source File  |  1995-01-05  |  17.7 KB  |  395 lines

  1. 10   REM *** SIMPLOT by John Calder, Box 41-076, Auckland 3, NEW ZEALAND    ***
  2. 11   REM *** phone 0064 - 9 - 828 2612 (Auckland 828 2612 or 3784160)       ***
  3. 12   '
  4. 13   '***    3rd Dec 1994 - own text processor routine lines 14000 on
  5. 14   '***    gives more friendly input. Also response to [Esc]
  6. 15   '
  7. 16   '***    9th July, 1994 - tied in to new WPLOT programme via F10 key
  8. 17   '***    and COPY LINE is now on F9 rather than F7 for compatibility
  9. 22   '
  10. 24   '****** 30 May 1994 brings in more "open" equation editing
  11. 25   '       so students can now modify equations they typed in earlier.
  12. 26   '       Best with use of F9 key to repeat previously typed equation.
  13. 27   '       ALSO improved equation analysis to eliminate problem of stray
  14. 28   '       vertical lines.  Ref use of GFLAG% in lines 5330 to 5395
  15. 29   '
  16. 30   REM
  17. 31   REM *** VERSION of 20th Feb 1993 features use of F2 to give ² symbol
  18. 32   REM *** and simplify and cleanup of F1 screens and response to entry
  19. 33   REM *** of 'y = ' .  New plotting algorithm gives clearer lines where
  20. 34   REM *** gradient is steep, but has slowed down the plotting speed..
  21. 35   REM
  22. 40   REM *** VERSION of 7th January 1993 accepts input of the form      ***
  23. 41   REM *** y = 5x etc  without the need to specify "*" for multiplication ***
  24. 42   REM *** and uses my PowerBASIC programme PAGER.EXE for displaying      ***
  25. 43   REM *** extended documentation                                         ***
  26. 45   REM
  27. 50   REM *** VERSION  of 5th October 1992 improved F-key behavior        ***
  28. 70   DEFINT F-N
  29. 80   REM Reserve space for windows effect
  30. 90   DIM WGRSAVE%(12000), WCURSOR%(100), LENFIELD(25), DINPUT$(6, 25), DLINE$(24)
  31. 100  '
  32. 110   '*** Variable setup and guide
  33. 120   '***    SCREEN EDITing    F     KLINE (cursor line)   COLOR
  34. 121   '                         1        19                 10
  35. 122   '                         2        20                 11
  36. 123   '                         3        21                 12
  37. 124   '                         4        22                 13
  38. 125   '                         5        23                 14
  39. 126   '                         6        24                 15
  40. 127   '
  41. 128   F = 1: KLINE = 19: INSFLAG = 1
  42. 145   FOR J = 1 TO 24: DLINE$(J) = " ": NEXT J
  43. 150    ON ERROR GOTO 160
  44. 155    SCREEN 9: EGAFLAG$ = "YES": PL% = &HFFFF: GOTO 180
  45. 160    SCREEN 2: EGAFLAG$ = "NO": PL% = &HF0F0: RESUME 180
  46. 180    KEY OFF
  47. 190    ON ERROR GOTO 6000
  48. 200    REM Set up function keys
  49. 210       KEY 1, " HELP" + CHR$(13)
  50. 220       IF EGAFLAG$ = "YES" THEN KEY 2, "²" ELSE KEY 2, "^2"
  51. 230       KEY 3, " Exit" + CHR$(13)
  52. 240       KEY 4, " GUIDE" + CHR$(13)
  53. 250       KEY 5, " Clear" + CHR$(13)
  54. 260       KEY 6, "^"
  55. 280       KEY 8, "~"
  56. 290       KEY 9, "|"
  57. 300      KEY 10, "DRAW" + CHR$(13)
  58. 5000   REM Set up limits for simplified graph
  59. 5015   CLS
  60. 5020   WINDOW (-6.9, -4.75)-(9.100001, 7.75)
  61. 5022   COLOR 15
  62. 5025   LINE (-6.9, 7.75)-(-6.7, 7.25), , BF
  63. 5030   GET (-6.9, 7.75)-(-6.7, 7.25), WCURSOR%
  64. 5040   COLOR 7: PRINT "Keys   "; : COLOR 14: PRINT "F1";
  65. 5041   COLOR 7: PRINT "="; : COLOR 14: PRINT "H";
  66. 5042   COLOR 7: PRINT "ELP";
  67. 5050   COLOR 14: PRINT "    F2";
  68. 5051   COLOR 7: PRINT "="; : COLOR 14: PRINT "²";
  69. 5060   COLOR 14: PRINT "    F3";
  70. 5061   COLOR 7: PRINT "="; : COLOR 14: PRINT "E";
  71. 5062   COLOR 7: PRINT "XIT   ";
  72. 5070   COLOR 14: PRINT " F4";
  73. 5071   COLOR 7: PRINT "="; : COLOR 14: PRINT "G";
  74. 5072   COLOR 7: PRINT "uide";
  75. 5080   COLOR 14: PRINT "   F5";
  76. 5081   COLOR 7: PRINT "="; : COLOR 14: PRINT "C";
  77. 5082   COLOR 7: PRINT "LEAR";
  78. 5085   COLOR 14: PRINT "   F6";
  79. 5087   COLOR 7: PRINT "=to the power of": PRINT
  80. 5090   COLOR 14: PRINT "       F8"; : COLOR 7: PRINT "=clear line";
  81. 5092   COLOR 14: PRINT "    F9"; : COLOR 7: PRINT "=copy line";
  82. 5095   COLOR 14: PRINT "    F10"; : COLOR 7: PRINT "=draw-by-plot";
  83. 5098   '
  84. 5100   REM Set up grid lines
  85. 5105   COLOR 3
  86. 5110   FOR Y = -4 TO 7
  87. 5130      LINE (-6.9, Y)-(9.100001, Y), , , PL%
  88. 5140   NEXT Y
  89. 5150   FOR X = -6 TO 8
  90. 5160       LINE (X, -4.75)-(X, 7.75), , , PL%
  91. 5180   NEXT X
  92. 5190   REM
  93. 5200   REM start of graph drawing subroutine
  94. 5205   COLOR 11
  95. 5210   REM set up axes
  96. 5220      LINE (-6.9, 0)-(9.100001, 0)
  97. 5230      IF EGAFLAG$ = "YES" THEN LINE (0, -4.75)-(0, 7.75) ELSE LINE (0, -4.75)-(0, 7.75), , , &HFEFE
  98. 5250   REM Axes labels go here
  99. 5255   TEXTLINE = 0
  100. 5260   FOR YLABEL = 7 TO 1 STEP -1
  101. 5265      TEXTLINE = TEXTLINE + 2
  102. 5270      LOCATE TEXTLINE, 33: PRINT STR$(YLABEL)
  103. 5275   NEXT YLABEL
  104. 5290   LOCATE 16, 35: PRINT "0"
  105. 5300   COLUMN = 0
  106. 5301   FOR XLABEL = -6 TO -1
  107. 5302      COLUMN = COLUMN + 5
  108. 5303      LOCATE 16, COLUMN - 2: PRINT " " + STR$(XLABEL)
  109. 5304   NEXT XLABEL
  110. 5310   COLUMN = 34
  111. 5311   FOR XLABEL = 1 TO 8
  112. 5312      COLUMN = COLUMN + 5
  113. 5313      LOCATE 16, COLUMN: PRINT STR$(XLABEL)
  114. 5314   NEXT XLABEL
  115. 5320   FOR YLABEL = -1 TO -4 STEP -1
  116. 5322      TEXTLINE = 16 - 2 * YLABEL
  117. 5323      LOCATE TEXTLINE, 32: PRINT " "; STR$(YLABEL);
  118. 5324   NEXT YLABEL
  119. 5325   COLOR 11: LOCATE 17, 1: PRINT "GRAPHING OF EQUATIONS"
  120. 5326   COLOR 7: PRINT "Enter your equation below" ;
  121. 5327   LOCATE 25, 1: PRINT "[ INSERT active ]";
  122. 5328   FOR I = 1 TO 6: FOR J = 1 TO 25: DINPUT$(I, J) = " ": NEXT J: NEXT I
  123. 5329   GOTO 5400
  124. 5330   REM This is the bit that actually plots the function
  125. 5337   GFLAG% = 0
  126. 5340   FOR X = -6.9 TO 9.100001 STEP .025
  127. 5350      Y = FNF!(X)
  128. 5365      IF GFLAG% = 1 THEN 5380
  129. 5370      IF Y < -4.75 OR Y > 7.75 THEN 5390
  130. 5375      XPREV = X: YPREV = Y: GFLAG% = 1
  131. 5380      D = YPREV - Y: DD = 2 * D / 3
  132. 5384      LINE (X, Y)-(X, Y + DD)
  133. 5385      LINE (XPREV, YPREV)-(XPREV, YPREV - DD)
  134. 5387      XPREV = X: YPREV = Y
  135. 5390   NEXT X
  136. 5400 '********** start of main input routine *******************************
  137. 5410   KCOL = 6: LENFIELD(F) = 6
  138. 5420   GOSUB 14000
  139. 5428   IF HELPFLAG% = 1 THEN PUT (1.5,-3.75), WGRSAVE%, PSET: HELPFLAG% = 0
  140. 5458   '*** now for some answer analysis
  141. 5460   IF FUNCTION$ = "E" THEN 9000
  142. 5462   IF INSTR(FUNCTION$, "EXIT") > 0 THEN 9000
  143. 5466   IN3$ = LEFT$(FUNCTION$, 1)
  144. 5468   IF IN3$ = "H" THEN 8000
  145. 5470   IF INSTR(FUNCTION$, "HELP") > 0 THEN 8000
  146. 5472   IF FUNCTION$ = "C" THEN 5000
  147. 5474   IF INSTR(FUNCTION$, "CLEA") > 0 THEN 5000
  148. 5475   IF INSTR(FUNCTION$, "CGA") > 0 THEN SCREEN 2: EGAFLAG$ = "NO": PL% = &HF0F0: GOTO 180
  149. 5476   IF IN3$ = "G" OR INSTR(FUNCTION$, "GUID") > 0 THEN GOTO 9500
  150. 5480   IF IN3$ = "D" OR INSTR(FUNCTION$, "DRAW") > 0 THEN 5482 ELSE 5500
  151. 5482   LOCATE CSRLIN, 1: COLOR 15
  152. 5484   PRINT "**** loading DRAW-BY-PLOT programme ****": RUN "WPLOT"
  153. 5498 '
  154. 5500   OPEN "O", #1, "FUNCTION.BAS"
  155. 5510   F$ = "5550 " + "DEF FNF!(X) = " + FUNCTION$
  156. 5520   PRINT #1, F$
  157. 5530   CLOSE #1
  158. 5540   CHAIN MERGE "FUNCTION.BAS" ,5550,ALL
  159. 5550 DEF FNF!(X) = -X^50
  160. 5555 WINDOW (-6.9, -4.75)-(9.100001, 7.75)
  161. 5560 ON ERROR GOTO 6000
  162. 5565 GOTO 5330
  163. 5570 REM hard lesson learned on preserving variables 21/8/92
  164. 5571 REM in CHAIN MERGE filename,linenumber,ALL <-- is vital!
  165. 5572 REM
  166. 5800 '
  167. 6000 ' *** Sub for general errors
  168. 6005   IF ERL >= 5350 AND ERL < 5390 THEN RESUME 5390
  169. 6010   IF ERR = 5 THEN RESUME NEXT
  170. 6015   IF ERR = 70 THEN RESUME 6200
  171. 6020   PRINT : PRINT SPACE$(78): PRINT SPACE$(78)
  172. 6025   COLOR 15: BEEP
  173. 6030   PRINT "This programme has just 'crashed' due to some kind of ERROR"
  174. 6035   PRINT
  175. 6040   PRINT "This is probably not your fault, and the following information"
  176. 6045   PRINT "will help the writer, John Calder, make the programme better"
  177. 6050   PRINT
  178. 6055   PRINT "Please copy the following and contact John Calder, Box 41-076, Aucland 3"
  179. 6056   PRINT "Phone Auckland 8282612"
  180. 6057   PRINT
  181. 6060   PRINT "ERROR  "; ERR; " at line "; ERL; TAB(40); "CL = "; CURSORLINE
  182. 6065   PRINT "   y = "; FUNCTION$
  183. 6070   PRINT
  184. 6075   PRINT "Press Enter Key to return to menu and re-start from there"
  185. 6080   INPUT " ", ANYTHING$
  186. 6085   END 'SYSTEM
  187. 6090 '
  188. 6200 'Response to disk write-protected
  189. 6201 ' start with saving the screen graphics display and cursor position
  190. 6220 GET (1.5, 1.25)-(8.3, -3.75), WGRSAVE%
  191. 6230 LINE (1.5, 1.25)-(8.3, -3.75), 4, BF
  192. 6235 KLINE = CSRLIN: KCOL = POS(0)
  193. 6240    COLOR 12
  194. 6250    LOCATE 15, 44:              PRINT " ERROR - disk 'write-protected' "
  195. 6252    LOCATE 16, 44:              PRINT "                                "
  196. 6253    LOCATE 17, 44:              PRINT " Please remove the disk and     "
  197. 6254    LOCATE 18, 44:              PRINT " slide the little cover over    "
  198. 6255    LOCATE 19, 44:              PRINT " the hole in the corner.        "
  199. 6256    LOCATE 20, 44:              PRINT "                                "
  200. 6257    LOCATE 21, 44:              PRINT " Then put the disk back in and  "
  201. 6258    LOCATE 22, 44:           :  PRINT " press ENTER key to continue... "
  202. 6260 AK$ = INKEY$: IF AK$ = "" THEN 6260
  203. 6270 PUT (1.5, 1.25), WGRSAVE%, PSET  'restore screen to its former glory
  204. 6275 COLOR CURSORLINE - 9
  205. 6280 LOCATE KLINE, KCOL: GOTO 5400
  206. 6300 '
  207. 7990 REM
  208. 8000 REM ****************** HELP routines *******************
  209. 8100 REM Create HELP window, start by saving graphics
  210. 8110 REM Area involved is TEXTLINES 14 to 23 COLS 47 to 78
  211. 8120 REM Corresponding SIMPLOT points are (1.5 , 1.25) - (8.3 , -3.75)
  212. 8200 REM start with saving the screen graphics display
  213. 8220 GET (1.5, 1.25)-(8.3, -3.75), WGRSAVE%
  214. 8230 LINE (1.5, 1.25)-(8.3, -3.75), 4, BF
  215. 8240    COLOR 14
  216. 8250    LOCATE 15, 44:              PRINT " Equations type on 1 line only  "
  217. 8252    LOCATE 16, 44:              PRINT "                                "
  218. 8253    LOCATE 17, 44:              PRINT " eg y = x   becomes  y = x/3    "
  219. 8254    LOCATE 18, 44:              PRINT "        3                       "
  220. 8255    LOCATE 19, 44:              PRINT " and  y = x to the power of 3   "
  221. 8256    LOCATE 20, 44:              PRINT "      becomes y = x^3           "
  222. 8257    LOCATE 21, 44:              PRINT "                                "
  223. 8258    LOCATE 22, 44:           :  PRINT " press ENTER key to continue... "
  224. 8259 REM Use the graphics as a trick to draw a division line
  225. 8260 LINE (3.2, -.75)-(3.5, -.75)
  226. 8270 A$ = INKEY$: IF A$ = "" THEN 8270
  227. 8300    LOCATE 15, 44:              PRINT " y = x  is a good start         "
  228. 8301    LOCATE 16, 44:              PRINT "                                "
  229. 8302    LOCATE 17, 44:              PRINT " explore  y = x + 1 , y = x - 1 "
  230. 8303    LOCATE 18, 44:              PRINT "          y = -x    , y = 0.5x  "
  231. 8304    LOCATE 19, 44:              PRINT "                                "
  232. 8305    LOCATE 20, 44:              PRINT " y = x²   starts a curve family "
  233. 8306    LOCATE 21, 44:              PRINT "          (use F2 key to get ² )"
  234. 8307    LOCATE 22, 44:              PRINT " press ENTER key to continue... "
  235. 8310 A$ = INKEY$: IF A$ = "" THEN 8310
  236. 8320 REM I want this window to stay on-screen as
  237. 8325 REM student makes first attempts
  238. 8330 HELPFLAG% = 1
  239. 8335    LOCATE 22, 44: COLOR 15: PRINT " NOW ENTER YOUR EQUATION...     "
  240. 8340 GOTO 5400
  241. 8700 REM *******SUBROUTINE for when students enter  y =  again  *************
  242. 8702 REM start with saving the screen graphics display
  243. 8705 GET (1.5, 1.25)-(8.3, -3.75), WGRSAVE%
  244. 8707 LINE (1.5, 1.25)-(8.3, -3.75), 4, BF
  245. 8710    COLOR 14
  246. 8711    LOCATE 15, 44:              PRINT " You need to make a correction.."
  247. 8712    LOCATE 16, 44:              PRINT "                                "
  248. 8713    LOCATE 17, 44:              PRINT " y =     is already printed     "
  249. 8714    LOCATE 18, 44:              PRINT "         on the screen for you. "
  250. 8715    LOCATE 19, 44:              PRINT "         You just need to enter "
  251. 8716    LOCATE 20, 44:              PRINT "         the  x  expression.    "
  252. 8717    LOCATE 21, 44:              PRINT "                                "
  253. 8718    LOCATE 22, 44: COLOR 15:    PRINT "PRESS ANY KEY TO CONTINUE       "
  254. 8740 A$ = INKEY$: IF A$ = "" THEN 8740
  255. 8750 HELPFLAG% = 1
  256. 8755    LOCATE 22, 44:           :  PRINT " NOW ENTER YOUR EQUATION...     "
  257. 8760 GOTO 5400
  258. 8790 REM
  259. 8990 REM ************** END of HELP routines ****************
  260. 8995 REM
  261. 9000 REM ******* EXIT routine ***********
  262. 9110 CLS : SCREEN 1: COLOR , 2
  263. 9120 PRINT
  264. 9130 PRINT "    EXITING from graphing programme."
  265. 9160 T1 = TIMER
  266. 9165 IF TIMER - T1 < 2 THEN 9165
  267. 9170 SCREEN 0: WIDTH 80: COLOR 7, 0
  268. 9200 SYSTEM
  269. 9210 '
  270. 9500 ' *** SUB FOR WORKSHEET
  271. 9510   SHELL "PAGER WKSHEET.TXT"
  272. 9520   SCREEN 9
  273. 9530   GOTO 5000
  274. 9540 '
  275. 9900 '
  276. 14000   REM ************ Start of screen input routine *****************
  277. 14460   KLINE = F + 18: C% = F + 9
  278. 14462   COLOR C%
  279. 14465   LOCATE KLINE, 1: PRINT " y = ";
  280. 14470   PUT (-6.9 + (KCOL - 1) * .2, 7.75 - KLINE * .5), WCURSOR%, XOR
  281. 14480   LOCATE KLINE, KCOL
  282. 14500   AK$ = INKEY$: IF AK$ = "" THEN 14500
  283. 14505   PUT (-6.9 + (KCOL - 1) * .2, 7.75 - KLINE * .5), WCURSOR%, XOR
  284. 14510       IA = ASC(AK$)
  285. 14520       IF IA = 27 THEN 9000: REM 27 is ESCape key   *****************
  286. 14525       IF IA = 13 THEN 16000: REM input completed and checked on ENTER
  287. 14530       IF IA = 0 THEN 15000: REM arrow keys, insert, delete
  288. 14535       IF IA = 8 THEN 15500: REM Backspace key
  289. 14540       IF IA = 9 THEN F = F + 1: GOTO 14650: REM  Tab key
  290. 14567       IF AK$ = "~" THEN 15950: REM F6 clear field line
  291. 14568       IF AK$ = "=" OR AK$ = "Y" THEN PRINT AK$: GOTO 8700
  292. 14569       IF AK$ = "|" THEN 16400 '*** F9 for copy line
  293. 14570       IF IA < 32 THEN 14000
  294. 14600       IF INSFLAG = 1 THEN GOSUB 15700: LOCATE KLINE, KCOL  '*** insert procedure
  295. 14605       DINPUT$(F, KCOL) = AK$
  296. 14610       PRINT DINPUT$(F, KCOL);
  297. 14612       IF LENFIELD(F) < KCOL THEN LENFIELD(F) = KCOL
  298. 14615       KCOL = KCOL + 1
  299. 14620       IF KCOL > 24 THEN KCOL = 24
  300. 14640   REM **** return from subroutines handling tab and up/down arrow keys **
  301. 14650       IF F = 7 THEN F = 1
  302. 14660       IF F = 0 THEN F = 6
  303. 14760   GOTO 14000
  304. 14800  '**********
  305. 15000  REM ************** arrow and tab key analysis    ********************
  306. 15003  IF ASC(RIGHT$(AK$, 1)) = 77 THEN 14615: REM Right Arrow
  307. 15010  IF ASC(RIGHT$(AK$, 1)) = 75 THEN 15200: REM Left Arrow
  308. 15020  IF ASC(RIGHT$(AK$, 1)) = 80 THEN 15300: REM Down Arrow
  309. 15030  IF ASC(RIGHT$(AK$, 1)) = 72 THEN 15400: REM Up Arrow
  310. 15040  IF ASC(RIGHT$(AK$, 1)) = 15 THEN 15400: REM Shift Tab
  311. 15050  IF ASC(RIGHT$(AK$, 1)) = 71 THEN KCOL = 6: GOTO 14470  '*** Home arrow
  312. 15060  IF ASC(RIGHT$(AK$, 1)) = 79 THEN 15800: REM END arrow
  313. 15070  IF ASC(RIGHT$(AK$, 1)) = 83 THEN 15550: REM Delete key
  314. 15080  IF ASC(RIGHT$(AK$, 1)) = 82 THEN 15600: REM Insert key procedure & flag
  315. 15200  REM  *************        Left Arrow             ****************
  316. 15205       IF KCOL > 6 THEN KCOL = KCOL - 1
  317. 15220       GOTO 14470
  318. 15300  REM  *************    Down Arrow                 ****************
  319. 15310       F = F + 1
  320. 15320       GOTO 14650
  321. 15400  REM  *************    Up Arrow  or Shift Tab     **************** 
  322. 15410       F = F - 1
  323. 15420       GOTO 14650
  324. 15500  REM  *************    Backspace Key - Delete comes in at 15550 *******
  325. 15510       IF KCOL = 6 THEN GOTO 14470
  326. 15515       KCOL = KCOL - 1
  327. 15520       LOCATE KLINE, KCOL
  328. 15550       FOR J = KCOL TO 24
  329. 15555       DINPUT$(F, J) = DINPUT$(F, J + 1): PRINT DINPUT$(F, J);
  330. 15560       NEXT J
  331. 15565       LENFIELD(F) = LENFIELD(F) - 1
  332. 15570       GOTO 14470
  333. 15600  REM  ****   Insert Key - main entry control flag and indicator ******
  334. 15610       IF INSFLAG = 1 THEN 15650
  335. 15615       INSFLAG = 1
  336. 15620       LOCATE 25, 1: PRINT "[ INSERT active ]";
  337. 15630       GOTO 14470
  338. 15650       INSFLAG = 0
  339. 15660       LOCATE 25, 1: COLOR 15: PRINT "[ insert OFF    ]";
  340. 15670       GOTO 14470
  341. 15700  REM  *****  Insert Key - text shift sub to ref from main sequence ***
  342. 15740       LFLAG = 0
  343. 15750       FOR J = 24 TO KCOL + 1 STEP -1
  344. 15755       DINPUT$(F, J) = DINPUT$(F, J - 1)
  345. 15756       IF DINPUT$(F, J) <> " " THEN LFLAG = 1
  346. 15757       LOCATE KLINE, J: PRINT DINPUT$(F, J);
  347. 15760       NEXT J
  348. 15770       IF LFLAG = 1 THEN LENFIELD(F) = LENFIELD(F) + 1
  349. 15780  'TTTTTTTT DINPUT$(F, 25) = " "
  350. 15790       RETURN  '*** TO 14700
  351. 15800  REM  *************    END Arrow                 ****************
  352. 15805       IF LENFIELD(F) > 23 THEN LENFIELD(F) = 23
  353. 15807       IF LENFIELD(F) < 6 THEN LENFIELD(F) = 6
  354. 15810       KCOL = LENFIELD(F) + 1
  355. 15820       GOTO 14470
  356. 15830  REM
  357. 15950  REM  *************    CLEAR field line      ****************
  358. 15960       FOR J = 6 TO 24: DINPUT$(F, J) = " ": NEXT J
  359. 15980       LOCATE KLINE, 5: PRINT SPACE$(20)
  360. 15985       LENFIELD(F) = 6
  361. 15995       GOTO 14460
  362. 16000   '******* finish this input routine by analysing the          *****
  363. 16001   '******* individual DINPUT$ characters then assembling them  *****
  364. 16002   '******* into FUNCTION$ via assembly process array DLINE$()  *****
  365. 16020   FUNCTION$ = ""
  366. 16030   FOR I = 6 TO 24
  367. 16050      IF DINPUT$(F, I) = " " THEN 16150
  368. 16100      KCHR = ASC(DINPUT$(F, I))
  369. 16110      IF KCHR >= 97 AND KCHR <= 122 THEN KCHR = KCHR - 32
  370. 16120      DLINE$(I) = CHR$(KCHR)
  371. 16130      IF DLINE$(I) = "²" THEN DLINE$(I) = "^2"
  372. 16135      IF INSTR("XSCTAEL(", DLINE$(I)) <> 0 THEN GOSUB 16291
  373. 16140   FUNCTION$ = FUNCTION$ + DLINE$(I)
  374. 16150   NEXT I
  375. 16170   FPREV = F: F = F + 1: KCOL = 6: IF F = 7 THEN F = 1
  376. 16190   RETURN
  377. 16200   '
  378. 16290 REM **** SUBROUTINE FOR mx ---> m*x   ********
  379. 16291      J = I - 1: IF J = 5 THEN RETURN
  380. 16292      IF DLINE$(J) = " " THEN 16293 ELSE 16294
  381. 16293      J = J - 1: IF J = 5 THEN RETURN ELSE 16292
  382. 16294      IF INSTR("1234567890)X", RIGHT$(DLINE$(J), 1)) = 0 THEN RETURN
  383. 16295      DLINE$(I) = "*" + DLINE$(I)
  384. 16296 RETURN
  385. 16300 '
  386. 16400 '******* SUBROUTINE for COPY LINE on F9  *****
  387. 16410 LOCATE KLINE, 6: PRINT SPACE$(19); : LOCATE KLINE, 6
  388. 16420 FOR I = 6 TO 24
  389. 16430 DINPUT$(F, I) = DINPUT$(FPREV, I): PRINT DINPUT$(F, I);
  390. 16440 NEXT I
  391. 16450 LENFIELD(F) = LENFIELD(FPREV)
  392. 16455 IF LENFIELD(F) > 23 THEN LENFIELD(F) = 23
  393. 16460 KCOL = LENFIELD(F) + 1
  394. 16470 GOTO 14470
  395.